﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Entidades = PSE.Tools.CadastroMensagens.Entidades;
using Negocio = PSE.Tools.CadastroMensagens.Negocio;
using Apresentacao = PSE.Tools.CadastroMensagens.Apresentacao;
using PSE.Tools.Util.Entidades;
namespace Web.Paginas
{
    public partial class Idiomas : Base.PaginaBase, Apresentacao.IApresentacao
    {
        #region [ Variaveis ]
        private Apresentacao.Idiomas _apresentacao;
        #endregion [ Variaveis ]

        #region [ Construtor ]
        public Idiomas()
        {
            _apresentacao = new Apresentacao.Idiomas(this, new Negocio.Idiomas());
        }
        #endregion [ Construtor ]

        #region [ Eventos ]
        protected override void OnLoad(EventArgs e)
        {
            lnkNovo.Click += new EventHandler(lnkNovo_Click);
            lnkCancelar.Click += new EventHandler(lnkCancelar_Click);

            btnInserir.Click += new ImageClickEventHandler(btnInserir_Click);

            grid.ItemCommand += new RepeaterCommandEventHandler(grid_ItemCommand);
            if (!IsPostBack)
            {
                IniciaGrid();
            }
        }

        protected void grid_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            string sigla = e.CommandArgument.ToString();
            if (e.CommandName.Equals("Editar"))
            {
                Carregar(sigla);
            }
            if (e.CommandName.Equals("Excluir"))
            {
                Excluir(sigla);
            }
        }

        protected void btnInserir_Click(object sender, ImageClickEventArgs e)
        {
            Salvar();
        }

        protected void lnkNovo_Click(object sender, EventArgs e)
        {
            Novo();
        }

        protected void lnkCancelar_Click(object sender, EventArgs e)
        {
            Cancelar();
        }
        #endregion [ Eventos ]

        #region [ Métodos ]

        private void IniciaGrid()
        {
            var itens = _apresentacao.Lista();
            grid.DataSource = itens;
            grid.DataBind();
            lblQtdItens.Text = itens.Count.ToString();
        }

        private void Cancelar()
        {
            LimparCampos();
            form.Visible = false;
            lblMensagem.Text = "";
        }

        private void Novo()
        {
            LimparCampos();
            form.Visible = true;
            lblSigla.Text = string.Empty;
            lblDescricao.Text = string.Empty;
            lblMensagem.Text = string.Empty;
        }

        private void Salvar()
        {
            bool retorno = false;
            Entidades.Idioma idioma = new Entidades.Idioma();

            idioma.Sigla = txtSigla.Text;
            idioma.Descricao = txtDescricao.Text;

            if (txtSigla.Enabled != false)
                retorno = _apresentacao.Inserir(idioma);
            else
                retorno = _apresentacao.Atualizar(idioma);

            if (retorno)
                IniciaGrid();

            form.Visible = !retorno;
        }

        private void Excluir(string sigla)
        {
            Entidades.Idioma idioma = _apresentacao.Obter(sigla);
            _apresentacao.Excluir(idioma);
            IniciaGrid();
        }

        private void Carregar(string sigla)
        {
            Novo();
            Entidades.Idioma idioma = _apresentacao.Obter(sigla);
            txtSigla.Text = idioma.Sigla.ToString();
            txtSigla.Enabled = false;
            txtDescricao.Text = idioma.Descricao;
        }

        private void LimparCampos()
        {
            txtSigla.Text = string.Empty;
            txtSigla.Enabled = true;
            txtDescricao.Text = string.Empty;
        }

        public void EnviarMensagem(string mensagem)
        {
            lblMensagem.Text = mensagem;
            lblMensagem.CssClass = "fraseDestaque sucesso";
        }

        public void EnviarMensagemErro(string mensagem)
        {
            lblMensagem.Text = mensagem;
            lblMensagem.CssClass = "fraseDestaque erro";
        }

        public void EnviarMensagemValidacao(IEnumerable<ValidacaoEntidade> validacoes)
        {
            foreach (var validacao in validacoes)
                EnviarMensagemValidacao(validacao);
        }

        public void EnviarMensagemValidacao(ValidacaoEntidade validacao)
        {
            if (validacao.NomePropriedade == "Sigla")
            {
                lblSigla.CssClass = "atencao";
                lblSigla.Text = validacao.Mensagem;
            }
            if (validacao.NomePropriedade == "Descricao")
            {
                lblDescricao.CssClass = "atencao";
                lblDescricao.Text = validacao.Mensagem;            
            }


            lblMensagem.CssClass = "fraseDestaque atencao";
            lblMensagem.Text = "Verifique os campos abaixo...";
        }
        #endregion [ Métodos ]
    }
}